<?php
/**
 * @Author: king
 * @Last Modified by:   king
 * Date: 2018/10/25
 * Time: 17:25
 */

namespace App\Models\Api;
use AstroTool\Cache\CacheManage;
use AstroTool\Cache\RedisService;
use App\Exceptions\ApiException;
use Illuminate\Database\Eloquent\Model;
use Cache;

/**
 * 数据操作基础类
 * Class Base
 * @package app\common\model
 */
class Base extends Model
{
    /**
     * 缓存实例
     * @var CacheManage|null
     */
    public static $cacheManage;

    /**
     * redis对象
     * @var \RedisPackage|null
     */
    public static $redis;
    /**
     * redis操作句柄
     * @var \Redis|null
     */
    public static $redisHandler;
    /**
     * 缓存开关
     * @var int
     */
    public $cache_on = 1;
    /**
     * redis缓存-过期时间
     * 259200=86400*3
     * 604800=86400*7
     * @var int
     */
    //public $cache_time = 259200;

    /**
     * 缓存池对象
     * @var null
     */
    protected $cacheIoc = null;
    
    
    protected $connection = 'mysql_prefix';
    
     /**
     * redis缓存-过期时间
     * 259200=86400*3
     * 604800=86400*7
     * @var int
     */
    public $cache_time = 259200;

    public function __construct($data = [])
    {
        parent::__construct($data);

        $this->cache_on = (int)(env('cache.switch'));// 缓存开关
        /**
         * 若开启缓存，则实例化redis
         */
        if ($this->cache_on >= 1)
        {
            self::$redis = \RedisService::getInstance();
            /**
             * 若redis连接失败，则设置redis缓存开关为0关闭
             */
            if (self::$redis === null)
            {
                $this->cache_on = 0;
            }
        }
    }

    /**
     * 根据 包含id的列表 和redis key ，把没有在缓存里的id使用“,”拼接起来
     * @param array $list
     * @param string $redis_key
     * @return array|string
     */
    protected function getAllNotCacheIds($list = [], $redis_key = '')
    {
        $ids = [];

        foreach ($list as $k => $v)
        {
            // 查询所有缓存的详情，如果没有那么添加到ids，在detail里面进行一次性的查询 in()
            $temp = false;
            if ($this->cache_on >= 1)
            {
                $temp = Cache::get($redis_key . $v);
            }
            if ($temp === false && !in_array($v, $ids))//不存在，那么加入到ids 里
            {
                $ids[] = $v;
            }
        }

        $ids = implode(',', $ids);

        return $ids;
    }


    /**
     * 根据 包含id的列表 和redis key ，把没有在缓存里的id使用“,”拼接起来
     * @param array $list
     * @param string $redis_key
     * @return array|string
     */
    protected function getAllNotCachedIds($list = [], $redis_key = '')
    {
        $ids = [];

        foreach ($list as $k => $v)
        {
            // 查询所有缓存的详情，如果没有那么添加到ids，在detail里面进行一次性的查询 in()
            $temp = false;
            if ($this->cache_on >= 1)
            {
                $temp = Cache::get($redis_key . $v['id']);
            }
            if ($temp === false && !in_array($v['id'], $ids))//不存在，那么加入到ids 里
            {
                $ids[] = $v['id'];
            }
        }

        $ids = implode(',', $ids);

        return $ids;
    }

}